#ifndef _LOG_H_
#define _LOG_H_

enum {
    LOG_FATAL = 1,
    LOG_ERROR,
    LOG_WARN,
    LOG_INFO,
    LOG_DEBUG,
};

void _log_print(int level, const char *file, int line, const char *log, ...);

#define log_fatal(_fmt, ...) _log_print(LOG_FATAL, __FILE__, __LINE__, _fmt, ##__VA_ARGS__)
#define log_error(_fmt, ...) _log_print(LOG_ERROR, __FILE__, __LINE__, _fmt, ##__VA_ARGS__)
#define log_warn(_fmt, ...)  _log_print(LOG_WARN, __FILE__, __LINE__, _fmt, ##__VA_ARGS__)
#define log_info(_fmt, ...)  _log_print(LOG_INFO, __FILE__, __LINE__, _fmt, ##__VA_ARGS__)
#define log_debug(_fmt, ...) _log_print(LOG_DEBUG, __FILE__, __LINE__, _fmt, ##__VA_ARGS__)

void set_log_level(int level);

#endif
